#!/bin/bash

# ide 配置文件路径(运行前请确认修改，非toolbox用户填写安装路径)
ide_path="C:/Users/c1596/AppData/Roaming/JetBrains"

# ja-netfilter 存放路径(运行前请确认修改，wsl用户请填写windows路径)
jar_path="D:/ja-netfilter/ja-netfilter.jar"

# 文件夹遍历深度，越小速度约快
deep=3


# 转换 Windows 路径为 Git Bash 路径
convert2gitBash() {
  # 输入参数为 Windows 路径
  windows_path="$1"
  # 将反斜杠替换为正斜杠
  linux_path=${windows_path//\\//}
  # 提取磁盘驱动器
  drive_letter=${linux_path:0:1}
  drive_letter=$(echo "$drive_letter" | tr '[:upper:]' '[:lower:]')
  # 构建 Git Bash 路径
  gitbash_path="/$drive_letter${linux_path:2}"
  # 返回转换后的路径
  echo "$gitbash_path"
}


# 判断终端类型并进行转换
profile=""
if [ -n "$WSL_DISTRO_NAME" ]; then
    echo "当前是 WSL 终端"

    #　监测一下是Windows路径就转换一下，linux 路径不用管
    if [[ $ide_path =~ ^[A-Za-z]: ]]; then
        echo "当前路径属于 Windows 系统"
        profile=$(wslpath "$ide_path")
    elif [[ $ide_path =~ ^/ ]]; then
        echo "当前路径属于 Linux 系统,不做处理"
    fi

    #TODO 在这里添加 WSL 终端的代码
elif [ -n "$BASH_VERSION" ]; then
    echo "当前是 Bash 终端"
    profile=$(convert2gitBash "$ide_path")
elif [ -n "$ZSH_VERSION" ]; then
    echo "当前是 Zsh 终端"
    #TODO 在这里添加 Zsh 终端的代码
else
    echo "当前是未知终端"
    # 在这里添加未知终端的代码
fi
echo "配置路径：$profile"

# 拼接需要写入的字符串
last_line="\-javaagent:$jar_path"
echo 'scanning ...'
# 1.遍历目录，获取配置文件位置
file_list=()
while IFS= read -r -d '' line; do
  file_list+=("$line")
done < <(find "$profile" -maxdepth "$deep" -name "*.vmoptions" -print0)
echo 'find file: '${#file_list[@]}

# 2.查找文件是否包含内容，不包含则新增
for (( i = 0; i < ${#file_list[@]}; i++ )); do
  file="${file_list[i]}"
  if ! grep 'ja-netfilter' "$file"  >/dev/null; then
    #不存在，添加字符串
    echo "rewrite: $file"
    sed '$a'"--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED\
        \n--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED\
        \n$last_line" "$file" > newfile
    mv newfile "$file"
  else
    #存在，不做处理
    echo "pass: $file"
  fi
done